#include <iostream>
#include <cstdlib>
#include <cstring>
#include <vector>
using namespace std;

vector<string> sresult;

// using the back-tracking algorithm to solve this problem


string f(string s, int n, int i)
{
	//auto const m=0;
	if(n==0)
	{
		sresult.push_back(s);
		return s+"\n";
	}
	char buff[10];
	//buff[1] = '\0';
	string p = (!strcmp(s.c_str(),""))? string(itoa(n,buff,10))+"=" : s + "+";
	int j = (!strcmp(s.c_str(),"")) ? n-1 : n;
	string r="";
	for(int k=i;k<=j;++k)
	{
		char buf[10];
		//buf[1]='\0';
		r += f(p+itoa(k,buf,10),n-k,k);
	}
	return r;
}

string g(int n)
{
	//if(n==1)
	//	return 1;
	//else
	//{
	//	for(int i=1;i<n;++i)
	//	{
	//		//int r = g(n-i);
	//		cout<<g(n-i)<<"+"<<i<<"+";
	//		cout<<endl;
	//	}
	//}
	return f("",n,1);
}



int main()
{
	string s = g(25);
	for(int i=0;i<sresult.size();++i)
	{
		cout<<sresult[i]<<endl;
	}
	cin.get();
	return 0;
}